
#ifndef OBJECTVALIDATOR_HPP_
#define OBJECTVALIDATOR_HPP_

#include "../logger/logger.hpp"
#include "../view/map.hpp"
#include "BaseValidator.hpp"
#include "../main/graph.hpp"
#include "controlMapObject.hpp"

/**
 * Class MapObjectValidator: encargada de la
 * validacion de los objetos de que figuran
 * en el mapa.
 * Validaciones: 
 *  - cantidad 
 *  - formato de los campos
 */
class ObjectValidator : public BaseValidator{
private: 
	Logger				*logger;
	Graph				*graph;
	int					numberOfFieldsExpected;
	ControlMapObject	mapObject;

public:
	
	/**
	 * Constructor por defecto de la clase ObjectValidator.
	 */
	ObjectValidator(){}

	/**
	 * Constructor parametrizado de la clase MapObjectValidator.
	 */
	ObjectValidator(std::string &file_to_parse, Logger *log, Graph *graph);

	/**
	 * Destructor de la clase MapObjectValidator.
	 */
	virtual ~ObjectValidator();

	/**
	 * Generador del contenido de la clase MapObjectValidator.
	 */
	void create(std::string &fileToParse, Logger *log, Graph *graph);

	/**
	 * Metodo que valida la cantidad de campos del objecto de mapa ingresante.
	 * @param lineCount de tipo int.
	 * @param fieldAmount de tipo int.
	 */
	void validateNumberOfFields(int lineCount, int fieldAmount);

	/**
	 * Metodo que valida el tipo del campo del objecto de mapa ingresante.
	 * @param lineCount de tipo int.
	 * @param fieldNumber de tipo int.
	 * @param field de clase std::string.
	 */
	void validateField(int lineCount, int fieldNumber, std::string field);

	/**
	 * Metodo que valida la insercion del objecto de mapa en el mapa.
	 * @param lineCount de tipo int.
	 */
	void validateElementAdding(int lineCount);

};

#endif /* OBJECTVALIDATOR_HPP_ */